package com.study.d022transform;

import javafx.application.Application;
import javafx.geometry.Bounds;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

/**Transform接口之子类  Scale的使用
 * Scale类，用于缩放节点
*@description
*@author xtayhame
*date 2020年3月17日
*version
*since v1.0
*/
public class ScaleMain extends Application{
	public static void main(String[] args) {
		launch(args);
	}
	@Override
	public void start(Stage stage) throws Exception {
		AnchorPane anchorPane = new AnchorPane();


		AnchorPane  pane = new AnchorPane();
		pane.setPrefWidth(600);
		pane.setPrefHeight(500);
		pane.setStyle("-fx-background-color:#FFF987");

		AnchorPane.setTopAnchor(pane, 100.0);
		AnchorPane.setLeftAnchor(pane, 100.0);

		anchorPane.getChildren().add(pane);
		stage.setScene(new Scene(anchorPane));
		stage.setWidth(800);
		stage.setHeight(700);
		stage.show();

		//
		Button b1 = new Button("第一个按钮");
		b1.setPrefSize(100, 100);
		pane.getChildren().add(b1);

		Button b2 = new Button("第二个按钮");
		b2.setPrefSize(100, 100);
		pane.getChildren().add(b2);

		//对b2按钮进行缩放操作
		//以(100,0)为原点进行0.5倍的缩放, 注意：这里的100是自身坐标相对父坐标来计算的
		/*Scale scale = new Scale(0.5,0.5,100, 0);
		b2.getTransforms().add(scale);*/


		//以(150,150)为原点进行0.5倍的缩放,即以b2组件的中心来缩放
		Scale scale = new Scale(0.5,0.5,50, 50);
		b2.getTransforms().add(scale);


		System.out.println("b2缩放后的大小：宽"+b2.getWidth()+ "   高：" +b2.getHeight());  //返回 0,0 这种方式无法获取真正的宽和高
		System.out.println("b2缩放后的大小：宽"+b2.getPrefWidth()+ "   高：" +b2.getPrefHeight());  //这种方式返回的还是原来设置的100,100


		//此时获取b2的位置
		//用getLayoutX() 和 getLayoutY() 无法获取位移后坐标
		System.out.println("使用 getLayoutXXX()方法获取坐标：  X:"+b2.getLayoutX() + "  Y:" + b2.getLayoutY());  // 0   0


		//使用getLocalToParentTransform() 可以获取组件通过位移后的真实坐标位置
		System.out.println("【使用getLocalToParentTransform()方法获取坐标--相对父组件】：   X:"+b2.getLocalToParentTransform().getTx()  + "   Y" + b2.getLocalToParentTransform().getTy());

		System.out.println("【使用getLocalToParentTransform()方法获取坐标--相对场景】：   X:"+b2.getLocalToSceneTransform().getTx()  + "   Y" + b2.getLocalToSceneTransform().getTy());


		//注意： 下面两种方法都无法获取组件的宽和高
		Bounds bd1 = b2.getLayoutBounds();
		System.out.println("相对组件自己 【坐标】 [("+bd1.getMinX() + "  " +bd1.getMinY()  + "),("+bd1.getMaxX()+"  " +bd1.getMaxY() +")]  宽：" + bd1.getWidth() + "   高：" + bd1.getHeight());

		Bounds bd2 = b2.localToParent(bd1);
		System.out.println("相对父组件【坐标】 [("+bd2.getMinX() + "  " +bd2.getMinY()  + "),("+bd2.getMaxX()+"  " +bd2.getMaxY() +")]   宽：" + bd2.getWidth() + "   高：" + bd2.getHeight());

	}
}
